package org.ehe.erp.constants;

/**
 * 质检任务常量类
 *
 * @author zhangnn
 * @className QualityTaskConstants
 * @description 质检任务相关的常量定义
 * @date 2025-09-11 16:15:00
 */
public class QualityTaskConstants {

    /**
     * 质检任务状态
     */
    public static class Status {
        /** 待质检 */
        public static final Integer PENDING = 0;
        /** 质检中 */
        public static final Integer IN_PROGRESS = 1;
        /** 质检完成 */
        public static final Integer COMPLETED = 2;
        /** 质检不合格 */
        public static final Integer FAILED = 3;
        /** 任务暂停 */
        public static final Integer PAUSED = 4;
    }

    /**
     * 质检任务优先级
     */
    public static class Priority {
        /** 普通 */
        public static final Integer NORMAL = 1;
        /** 紧急 */
        public static final Integer URGENT = 2;
        /** 非常紧急 */
        public static final Integer CRITICAL = 3;
    }

    /**
     * 超时标识
     */
    public static class TimeoutFlag {
        /** 未超时 */
        public static final Integer NOT_TIMEOUT = 0;
        /** 已超时 */
        public static final Integer TIMEOUT = 1;
    }

    /**
     * 默认配置
     */
    public static class Default {
        /** 默认超时时长（分钟）*/
        public static final Integer TIMEOUT_DURATION = 60;
        /** 任务单号前缀 */
        public static final String TASK_NO_PREFIX = "QC";
    }

    /**
     * 状态描述映射
     */
    public static String getStatusDesc(Integer status) {
        if (status == null) return "未知";

        return switch (status) {
            case 0 -> "待质检";
            case 1 -> "质检中";
            case 2 -> "质检完成";
            case 3 -> "质检不合格";
            case 4 -> "任务暂停";
            default -> "未知状态";
        };
    }

    /**
     * 优先级描述映射
     */
    public static String getPriorityDesc(Integer priority) {
        if (priority == null) return "普通";

        return switch (priority) {
            case 1 -> "普通";
            case 2 -> "紧急";
            case 3 -> "非常紧急";
            default -> "普通";
        };
    }

    /**
     * 判断状态是否可以执行指定操作
     */
    public static class StatusChecker {

        /**
         * 是否可以分配任务
         */
        public static boolean canAssign(Integer status) {
            return Status.PENDING.equals(status);
        }

        /**
         * 是否可以开始质检
         */
        public static boolean canStart(Integer status) {
            return Status.PENDING.equals(status);
        }

        /**
         * 是否可以完成质检
         */
        public static boolean canComplete(Integer status) {
            return Status.IN_PROGRESS.equals(status);
        }

        /**
         * 是否可以暂停任务
         */
        public static boolean canPause(Integer status) {
            return Status.IN_PROGRESS.equals(status);
        }

        /**
         * 是否可以恢复任务
         */
        public static boolean canResume(Integer status) {
            return Status.PAUSED.equals(status);
        }

        /**
         * 是否可以删除任务
         */
        public static boolean canDelete(Integer status) {
            return !Status.IN_PROGRESS.equals(status);
        }

        /**
         * 是否为进行中状态
         */
        public static boolean isInProgress(Integer status) {
            return Status.IN_PROGRESS.equals(status);
        }

        /**
         * 是否为完成状态
         */
        public static boolean isCompleted(Integer status) {
            return Status.COMPLETED.equals(status) || Status.FAILED.equals(status);
        }
    }
}
